<?php

Loader::using("ext::libs::MicrosoftDateFormatter");
Loader::using("models::entities::Inscritos");

/**
 * Description of ConfirmarDatos
 * 
 * @author boscaru 
 * @export Modules
 * @export-metadata RequiredRoles:ROLE_DECANO:ROLE_DIRECTOR_PROGRAMA
 */
class ConfirmarDatos extends Module {

    public function index() {
        $inscritos = $this->getInscritos();

        $this->assign("Inscritos", $inscritos);
        $this->assign("verDetalles", $this->route->action("verDetalles"));
        $this->assign("resultadoEntrevista", $this->route->action("resultadoEntrevista"));

        $this->display("index");
    }

    public function verDetalles() {
        $id = $this->request->get("idInscrito");

        if (is_numeric($id)) {

            /* @var $inscrito Inscritos */
            $inscrito = $this->model->admisiones->GetById($id);


            $this->assign("inscrito", $inscrito);
            $this->assign("UrlVolver", $this->route->action("index"));
            $this->assign("confirmarDatos", $this->route->action("aceptarDatos"));
            $this->assign("rechazarInscrito", $this->route->action("rechazarInscrito"));

            $this->display();
        } else {

            $this->index();
        }
    }

    public function resultadoEntrevista() {
        $id = $this->request->get("idInscrito");

        if (is_numeric($id)) {
            $respuestasList = $this->model->interview->GetByInscrito($id);
            $respuestas = array();

            foreach ($respuestasList as /* @var $respuesta EntrevistaRespondida */$respuesta) {
                $tipo = $respuesta->getPregunta()->getTipoPregunta();
                if (!isset($respuestas[$tipo])) {
                    $respuestas[$tipo] = array();
                }
                $respuestas[$tipo][] = $respuesta;
            }

            $this->assign("respuestas", $respuestas);
            $this->assign("UrlVolver", $this->route->action("index"));

            $this->display();
        } else {
            $this->index();
        }
    }

    public function aceptarDatos() {
        if ($this->request->submitted()) {
            $id = $this->request->post("id");
            if (is_numeric($id)) {
                /* @var $inscrito Inscritos */
                $inscrito = $this->model->admisiones->GetById($id);
                if ($inscrito->getEstadoAdmision() == EstadoAdmision::Inscrito) {
                    $inscrito->setEstadoAdmision(EstadoAdmision::DatosVerificados);
                    $this->model->admisiones->Update($inscrito);

                    $this->sendMailOk($inscrito);

                    $this->addMessage(new Message(
                                    "Los datos del aspirante <em>{$inscrito->getNombres()} {$inscrito->getApellidos()}</em> han sido aceptados y se le notificar&aacute; por correo electr&oacute;nico",
                                    "Datos confirmados:",
                                    Message::SUCCESS));
                }
            }
        }

        $this->index();
    }

    public function rechazarInscrito() {
        if ($this->request->submitted()) {
            $id = $this->request->post("id");
            if (is_numeric($id)) {
                /* @var $inscrito Inscritos */
                $inscrito = $this->model->admisiones->GetById($id);
                $inscrito->setEstadoAdmision(EstadoAdmision::NoAdmitido);
                $this->model->admisiones->Update($inscrito);
                $this->sendMailFail($inscrito);
                $this->addMessage(new Message(
                                "Los datos del aspirante '{$inscrito->getNombres()} {$inscrito->getApellidos()}' han sido rechazados, ahora el estudiante aparece como No Admitido.",
                                "Datos confirmados:",
                                Message::SUCCESS));
            }
        }

        $this->index();
    }

    private function sendMailOk(Inscritos $inscrito) {
        $emails = array();
        array_push($emails, $inscrito->getEmail());

        $params = array();

        $nombreCompleto = $inscrito->getApellidos() . ', ' . $inscrito->getNombres();

        array_push($params, $nombreCompleto);
        /* @var $planEstudio PlanesEstudios */
        $planEstudio = $inscrito->getPlanEstudio();

        array_push($params, $planEstudio->getNombrePlan());


        EmailsAdmisiones::SendMail(3, $emails, $params);
    }

    private function sendMailFail(Inscritos $inscrito) {
        $emails = array();
        array_push($emails, $inscrito->getEmail());

        $params = array();

        $nombreCompleto = $inscrito->getApellidos() . ', ' . $inscrito->getNombres();

        array_push($params, $nombreCompleto);
        /* @var $planEstudio PlanesEstudios */
        $planEstudio = $inscrito->getPlanEstudio();

        array_push($params, $planEstudio->getNombrePlan());
        array_push($params, "");

        EmailsAdmisiones::SendMail(5, $emails, $params);
    }

    private function getInscritos() {
        $inscritosList = array();
        $inscritos = $this->model->admisiones->GetAll();

        if (in_array("ROLE_DIRECTOR_PROGRAMA", $this->currentUser->getPermissions())) {
            $idPlanEstudio = $this->currentUser->getData()->get("idPlanEstudio");
            foreach ($inscritos as /* @var $inscrito Inscritos */$inscrito) {
                if ($inscrito->getPlanEstudio()->getCodigoPlan() == $idPlanEstudio) {
                    $inscritosList[] = $inscrito;
                }
            }
        } else {
            $inscritosList = $inscritos;
        }

        return $inscritosList;
    }

}

?>
